package intfns

import (
	
	

	
)

func last( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	return tree.Num(.Size), nil
}

func position( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	return tree.Num(.Pos), nil
}

func count( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	,  := [0].(tree.NodeSet)
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a node-set")
	}

	return tree.Num(len()), nil
}

func localName( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	var  tree.NodeSet
	 := true
	if len() == 1 {
		,  = [0].(tree.NodeSet)
	} else {
		 = .NodeSet
	}
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a node-set")
	}

	 := ""
	if len() == 0 {
		return tree.String(), nil
	}
	 := [0]

	 := .GetToken()

	switch .GetNodeType() {
	case tree.NtElem:
		 = .(xml.StartElement).Name.Local
	case tree.NtAttr:
		 = .(xml.Attr).Name.Local
	case tree.NtPi:
		 = .(xml.ProcInst).Target
	}

	return tree.String(), nil
}

func namespaceURI( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	var  tree.NodeSet
	 := true
	if len() == 1 {
		,  = [0].(tree.NodeSet)
	} else {
		 = .NodeSet
	}
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a node-set")
	}

	 := ""
	if len() == 0 {
		return tree.String(), nil
	}
	 := [0]

	 := .GetToken()

	switch .GetNodeType() {
	case tree.NtElem:
		 = .(xml.StartElement).Name.Space
	case tree.NtAttr:
		 = .(xml.Attr).Name.Space
	}

	return tree.String(), nil
}

func name( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	var  tree.NodeSet
	 := true
	if len() == 1 {
		,  = [0].(tree.NodeSet)
	} else {
		 = .NodeSet
	}
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a node-set")
	}

	 := ""
	if len() == 0 {
		return tree.String(), nil
	}
	 := [0]

	switch .GetNodeType() {
	case tree.NtElem:
		 := .GetToken().(xml.StartElement)
		 := ""

		if .Name.Space != "" {
			 = fmt.Sprintf("{%s}", .Name.Space)
		}

		 = fmt.Sprintf("%s%s", , .Name.Local)
	case tree.NtAttr:
		 := .GetToken().(xml.Attr)
		 := ""

		if .Name.Space != "" {
			 = fmt.Sprintf("{%s}", .Name.Space)
		}

		 = fmt.Sprintf("%s%s", , .Name.Local)
	case tree.NtPi:
		 = fmt.Sprintf("%s", .GetToken().(xml.ProcInst).Target)
	}

	return tree.String(), nil
}